package com.cool.controller.common;

import com.cool.bo.fileupload.FileUpload;
import com.cool.common.CommonResult;
import com.cool.common.ResponseCode;
import com.cool.utils.FileUtil;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

/**
 * 上传控制器
 */
@RestController
@RequestMapping("/file")
public class UploadController {

    @PostMapping("/upload")
    public CommonResult fileUpload(@RequestParam("file") MultipartFile file, HttpServletRequest request, HttpServletResponse response) {
        FileUpload fileUpload;
        System.out.println("进入文件上传");
        try {
            fileUpload = FileUtil.saveFile(file);
        } catch (Exception e) {
            return CommonResult.newCommonResult().setCode(ResponseCode.FILE_UPLOAD_FAILURE).setMsg("文件上传失败");
        }

        return CommonResult.newCommonResult().setCode(ResponseCode.FILE_UPLOAD_SUCCESS).setMsg("文件上传成功").setData(fileUpload);

    }


    @GetMapping("/dowload")
    public HttpServletResponse download(String path, HttpServletResponse response) {
        try {
            // path是指欲下载的文件的路径。
            File file = new File(path);
            // 取得文件名。
            String filename = file.getName();

            // 以流的形式下载文件。
            InputStream fis = new BufferedInputStream(new FileInputStream(path));
            byte[] buffer = new byte[fis.available()];
            fis.read(buffer);
            fis.close();
            // 清空response
            response.reset();
            // 设置response的Header
            response.addHeader("Content-Disposition", "attachment;filename=" + new String(filename.getBytes()));
            response.addHeader("Content-Length", "" + file.length());
            OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
            response.setContentType("application/octet-stream");
            toClient.write(buffer);
            toClient.flush();
            toClient.close();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
        return response;
    }


}
